<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 4.0.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">
  <link rel="alternate" href="/atom.xml" title="dy2903的博客" type="application/atom+xml">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">


<script id="hexo-configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/',
    scheme: 'Pisces',
    version: '7.5.0',
    exturl: false,
    sidebar: {"position":"left","display":"post","offset":12,"onmobile":false},
    copycode: {"enable":false,"show_result":false,"style":null},
    back2top: {"enable":true,"sidebar":false,"scrollpercent":false},
    bookmark: {"enable":false,"color":"#222","save":"auto"},
    fancybox: false,
    mediumzoom: false,
    lazyload: false,
    pangu: false,
    algolia: {
      appID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    },
    localsearch: {"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},
    path: '',
    motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
    translation: {
      copy_button: 'Copy',
      copy_success: 'Copied',
      copy_failure: 'Copy failed'
    },
    sidebarPadding: 40
  };
</script>

  <meta name="description" content="在谈对象存储是什么之前，我们先回顾一下块存储和文件存储是什么 块存储与文件存储块存储：常见的块存储设备是磁盘阵列，它会向主机提供裸磁盘空间。也就是说操作系统看到的只是一块磁盘而已，虽然它底层可能是多块硬盘组合起来的逻辑盘。 这种方式下，操作系统还可以对挂载的裸硬盘进行分区、格式化，与主机内置的硬盘使用没有区别。 一般块存储会采用SAN架构组网，而且会使用FC 协议，这样传输速度和吞吐量都会很大。但">
<meta property="og:type" content="article">
<meta property="og:title" content="大话存储，学习笔记（15章），对象存储">
<meta property="og:url" content="https:&#x2F;&#x2F;duyang2903.gitee.io&#x2F;2019&#x2F;11&#x2F;15&#x2F;%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8815%E7%AB%A0%EF%BC%89%EF%BC%8C%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8&#x2F;index.html">
<meta property="og:site_name" content="dy2903的博客">
<meta property="og:description" content="在谈对象存储是什么之前，我们先回顾一下块存储和文件存储是什么 块存储与文件存储块存储：常见的块存储设备是磁盘阵列，它会向主机提供裸磁盘空间。也就是说操作系统看到的只是一块磁盘而已，虽然它底层可能是多块硬盘组合起来的逻辑盘。 这种方式下，操作系统还可以对挂载的裸硬盘进行分区、格式化，与主机内置的硬盘使用没有区别。 一般块存储会采用SAN架构组网，而且会使用FC 协议，这样传输速度和吞吐量都会很大。但">
<meta property="og:locale" content="en">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-8d4aa8e6758c9d4c.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-2a48eb2b842204d8.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-6497493c85f715b4.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-bb08f35f8414a425.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-e9708118ff375b65.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-8f57b541639b9d2a.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:updated_time" content="2019-11-13T13:27:14.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-8d4aa8e6758c9d4c.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">

<link rel="canonical" href="https://duyang2903.gitee.io/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8815%E7%AB%A0%EF%BC%89%EF%BC%8C%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome: false,
    isPost: true,
    isPage: false,
    isArchive: false
  };
</script>

  <title>大话存储，学习笔记（15章），对象存储 | dy2903的博客</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-meta">

    <div>
      <a href="/" class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">dy2903的博客</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
        <p class="site-subtitle">与肝胆人共事，从无字句读书</p>
  </div>

  <div class="site-nav-toggle">
    <div class="toggle" aria-label="Toggle navigation bar">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>
</div>


<nav class="site-nav">
  
  <ul id="menu" class="menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>Home</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>Archives</a>

  </li>
  </ul>

</nav>
</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content">
            

  <div class="posts-expand">
      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block " lang="en">
    <link itemprop="mainEntityOfPage" href="https://duyang2903.gitee.io/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8815%E7%AB%A0%EF%BC%89%EF%BC%8C%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="dy2903">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="dy2903的博客">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          大话存储，学习笔记（15章），对象存储
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">Posted on</span>

              <time title="Created: 2019-11-15 10:48:24" itemprop="dateCreated datePublished" datetime="2019-11-15T10:48:24+08:00">2019-11-15</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                <span class="post-meta-item-text">Edited on</span>
                <time title="Modified: 2019-11-13 21:27:14" itemprop="dateModified" datetime="2019-11-13T21:27:14+08:00">2019-11-13</time>
              </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <p>在谈对象存储是什么之前，我们先回顾一下块存储和文件存储是什么</p>
<h1 id="块存储与文件存储"><a href="#块存储与文件存储" class="headerlink" title="块存储与文件存储"></a>块存储与文件存储</h1><h2 id="块存储："><a href="#块存储：" class="headerlink" title="块存储："></a>块存储：</h2><p>常见的块存储设备是<strong>磁盘阵列</strong>，它会向主机提供<strong>裸磁盘</strong>空间。也就是说操作系统看到的只是一块磁盘而已，虽然它底层可能是多块硬盘组合起来的逻辑盘。</p>
<p>这种方式下，操作系统还可以对挂载的裸硬盘进行分区、格式化，与主机内置的硬盘使用没有区别。</p>
<p>一般块存储会采用SAN架构组网，而且会使用FC 协议，这样传输速度和吞吐量都会很大。但是也正因为需要使用FC协议，自然也需要FC HBA卡以及FC交换机，成本将比较高。</p>
<p>另外，磁盘阵列一般会把某一块LUN映射给某个主机，也就是说这块主机独享这块LUN，就相当于它的本地盘，自然无法与其他的主机共享数据。<br><img src="http://upload-images.jianshu.io/upload_images/1323506-8d4aa8e6758c9d4c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h2 id="文件存储"><a href="#文件存储" class="headerlink" title="文件存储"></a>文件存储</h2><p>块存储很难解决文件共享的问题，因为主机的操作系统可能不一样，所以文件管理系统也不一样，那么能不能把文件系统单拿出来，放到某一专用的设备上呢？当然可以，这就形成了文件存储系统，最经典的当属NAS设备。</p>
<p>简单的说，NAS设备就是把文件管理功能移植到专用的设备上，而且只需要以太网就可以，成本大大降低。</p>
<p>缺点也很明显，传输速率远远赶不上SAN网络。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-2a48eb2b842204d8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h1 id="对象存储系统"><a href="#对象存储系统" class="headerlink" title="对象存储系统"></a>对象存储系统</h1><h2 id="对象存储怎么来的"><a href="#对象存储怎么来的" class="headerlink" title="对象存储怎么来的"></a>对象存储怎么来的</h2><p>我们知道块存储、文件存储各有其优缺点，简单的说，块存储读写块，但是不利于共享，文件存储读写慢，但是利于共享。</p>
<p>有没有一种方式，可以克服他们的优缺点呢？也就是读写快，同时利于共享。要想读写快，最好的方法是<strong>并行</strong>取，要想共享，最好能结合文件系统的特点。既然如此，我们先再看看文件存储有没有什么可以借鉴的地方吧。</p>
<p>在文件系统里面，一个文件包含了<strong>元数据以及内容</strong>，比如FAT32这种文件系统，文件数据与元数据一起存放的。当你要存放一个文件的时候，首先会划分为4k大小的块，然后写到硬盘里面，注意切分的时候会不区分数据和元数据。</p>
<p>每个块都会指向下一个块的地址，所以读取的时候只能一个一个顺序的查找，速率自然上不去。具体实现方式可见<a href="http://www.cnblogs.com/dy2903/p/8367217.html" target="_blank" rel="noopener">http://www.cnblogs.com/dy2903/p/8367217.html</a></p>
<p>后来我们把主机的文件系统移植到专门的NAS设备上，主机要访问某个文件只需要传递<strong>路径和文件名</strong>即可。也就是说NAS设备其实就是把“文件——块”的映射关系移植到了专门的设备里面。如下图所示。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-6497493c85f715b4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>传统的NFS架构，一个目录只能载入一次，所有的请求只能发与它，哪怕是这个目录下的文件实际上是存在另一个节点上，也需要通过此节点进行转发，无法并行。</p>
<p>那我们能不能故技重施，把磁盘也挪出去，组成集群，然后文件系统可以并行的访问这些磁盘呢。</p>
<p>但是主机客户端怎么知道要访问的文件在哪个磁盘上呢？再不能在客户端本地维护一份映射关系吧。解决的方法是<strong>维护元数据</strong>的功能也剥离出来，形成一个独立的<strong>元数据服务器</strong>，由它来维护“文件——磁盘——块”之间的映射关系。</p>
<p>那么如果客户端要访问文件，首先需要向元数据服务器发起请求，由它来告知需要文件存放的具体位置。之后，客户端可以直接向磁盘发出IO请求。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-bb08f35f8414a425.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>总结一下就是将<strong>文件系统逻辑从主机端移出来放到元数据服务器上，所有的硬盘也放到网络中</strong></p>
<p>不过这个架构需要硬盘非常的智能，因为要把很多逻辑放到硬盘上来处理，到目前来说也没有实现。没有关系，我们把硬盘换成Server就可以了，取名为<strong>对象存储设备(Object Storage Device， OSD)</strong></p>
<p>那么<strong>对象存储</strong>就是把<strong>元数据</strong>独立出来，成为<strong>元数据服务器</strong>，主要作用是存储对象数据的元数据。而其他实际存放文件数据部分的节点就叫<strong>OSD</strong>。文件我们改称为<code>Object</code>，目录称为<code>Partition</code>，OSD中每个Object用一个128b的Object ID(OID)表示，其实就类似NAS中的File Handle（文件句柄）</p>
<p>那么用户访问对象的时候，首先需要向元数据服务器请求对象存储在哪些OSD里面，然后用户才会向这些OSD服务器再次请求。可以看出，这样可以实现多台节点并行传输数据，速度自然加快。</p>
<p>同时因为对象存储是有专门的文件系统的，OSD节点又相当于文件服务器，所以可以解决文件共享的问题。</p>
<p>总的来说，对象存储结合了块存储和文件存储的优点。</p>
<h2 id="访问的流程"><a href="#访问的流程" class="headerlink" title="访问的流程"></a>访问的流程</h2><p>下图为对象存储的整体架构，其中元数据服务器、OSD服务器之前已经讲过了，我们还需要在主机上安装一个代理<code>OSD Initiator</code>。</p>
<p>如果用户想读取或者写入文件的时候，首先由这个代理向元数据服务器中查询文件存储的OSD设备，然后也是由它与操作系统的虚拟目录层对接，翻译成对应的OSD 请求，发给OSD。而且代理只需要给出<strong>OID</strong>即可，不需要给出绝对路径。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-e9708118ff375b65.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h2 id="与集群分布式文件系统的区别"><a href="#与集群分布式文件系统的区别" class="headerlink" title="与集群分布式文件系统的区别"></a>与集群分布式文件系统的区别</h2><p>我们可以再对比一下对象存储与集群分布式文件系统的区别。</p>
<p>集群文件系统架构中，客户端只能从某台节点上挂载某个目录，如果请求的数据不在这个节点上，会由它来进行重定向，那么这个节点的性能将成为瓶颈。</p>
<p>而OSD则不然，在开始访问之前，需要从元数据服务器上查询目标文件分布在哪些OSD节点上，然后才会<strong>并行</strong>的向相关节点发起IO请求，并行的存储数据，简单的讲对象存储既有块存储的高效率，又有文件存储的灵活性。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-8f57b541639b9d2a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>

    </div>

    
    
    

      <footer class="post-footer">

        

          <div class="post-nav">
            <div class="post-nav-next post-nav-item">
                <a href="/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8816%E7%AB%A0%EF%BC%89%EF%BC%8C%E6%95%B0%E6%8D%AE%E4%BF%9D%E6%8A%A4%E5%92%8C%E5%A4%87%E4%BB%BD%E6%8A%80%E6%9C%AF/" rel="next" title="大话存储，学习笔记（16章），数据保护和备份技术">
                  <i class="fa fa-chevron-left"></i> 大话存储，学习笔记（16章），数据保护和备份技术
                </a>
            </div>

            <span class="post-nav-divider"></span>

            <div class="post-nav-prev post-nav-item">
                <a href="/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8810~13%E7%AB%A0%EF%BC%89%EF%BC%8CNAS%E3%80%81IP-SAN/" rel="prev" title="大话存储，学习笔记（10~13章），NAS、IP-SAN">
                  大话存储，学习笔记（10~13章），NAS、IP-SAN <i class="fa fa-chevron-right"></i>
                </a>
            </div>
          </div>
      </footer>
    
  </article>
  
  
  

  </div>


          </div>
          

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          Table of Contents
        </li>
        <li class="sidebar-nav-overview">
          Overview
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#块存储与文件存储"><span class="nav-number">1.</span> <span class="nav-text">块存储与文件存储</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#块存储："><span class="nav-number">1.1.</span> <span class="nav-text">块存储：</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#文件存储"><span class="nav-number">1.2.</span> <span class="nav-text">文件存储</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#对象存储系统"><span class="nav-number">2.</span> <span class="nav-text">对象存储系统</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#对象存储怎么来的"><span class="nav-number">2.1.</span> <span class="nav-text">对象存储怎么来的</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#访问的流程"><span class="nav-number">2.2.</span> <span class="nav-text">访问的流程</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#与集群分布式文件系统的区别"><span class="nav-number">2.3.</span> <span class="nav-text">与集群分布式文件系统的区别</span></a></li></ol></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">dy2903</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">20</span>
          <span class="site-state-item-name">posts</span>
        </a>
      </div>
      <div class="site-state-item site-state-tags">
        <span class="site-state-item-count">2</span>
        <span class="site-state-item-name">tags</span>
      </div>
  </nav>
</div>
  <div class="feed-link motion-element">
    <a href="/atom.xml" rel="alternate">
      <i class="fa fa-rss"></i>RSS
    </a>
  </div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2019</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">dy2903</span>
</div>
  <div class="powered-by">Powered by <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> v4.0.0
  </div>
  <span class="post-meta-divider">|</span>
  <div class="theme-info">Theme – <a href="https://pisces.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Pisces</a> v7.5.0
  </div>

        












        
      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>
<script src="/js/utils.js"></script><script src="/js/motion.js"></script>
<script src="/js/schemes/pisces.js"></script>
<script src="/js/next-boot.js"></script>



  
















  

  

</body>
</html>
